package com.wosiliujing.learning.controller;

import com.wosiliujing.learning.admin.po.SysDept;
import com.wosiliujing.learning.annotation.SysLog;
import com.wosiliujing.learning.constant.CommonConstants;
import com.wosiliujing.learning.service.SysDeptService;
import com.wosiliujing.learning.util.R;
import lombok.AllArgsConstructor;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDateTime;

/**
 * @author: liujing
 * @date: 2019/5/7 20:40
 * @description:
 */
@RequestMapping("/dept")
@RestController
@AllArgsConstructor
public class SysDeptController {

    private final SysDeptService sysDeptService;

    /**
     * 通过id查询部门信息
     * @param id 部门id
     * @return 部门信息
     */
    @GetMapping("detail/{id}")
    public R findById(@PathVariable String id){
        return R.data(sysDeptService.getById(id));
    }


    /**
     * 查询全部部门树
     * @return 部门树
     */
    @GetMapping("/tree")
    public R getTree(){
        return R.data(sysDeptService.listDeptTree());
    }

    /**
     * 查询当前用户所属部门部门树
     * @return 部门树
     */
    @GetMapping("/user-tree")
    public R getCurrentUserDeptTree(){
        return R.data(sysDeptService.listCurrentUserDeptTree());
    }


    /**
     * 新增部门
     * @param sysDept 部门信息
     * @return 新增结果
     */
    @SysLog("新增部门")
    @PreAuthorize("@pms.hasPermisssion('sys_dept_add')")
    @PostMapping("/add")
    public R addSysDept(@RequestBody SysDept sysDept){
        return sysDeptService.saveSysDept(sysDept)?R.ok():R.error(CommonConstants.SAVE_FAIL);
    }

    /**
     * 删除部门
     * @param id 部门id
     * @return 删除结果
     */
    @SysLog("删除部门")
    @PreAuthorize("@pms.hasPermisssion('sys_dept_del')")
    @DeleteMapping("/delete/{id}")
    public R deleteSysDept(@PathVariable String id){
        return sysDeptService.deleteSysDept(id)?R.ok():R.error(CommonConstants.DELETE_FAIL);
    }

    /**
     * 更新部门
     * @param sysDept 部门信息
     * @return 更新结果
     */
    @SysLog("更新部门")
    @PreAuthorize("@pms.hasPermisssion('sys_dept_edit')")
    @PutMapping("/update")
    public R updateSysDept(@RequestBody SysDept sysDept){
        sysDept.setUpdateTime(LocalDateTime.now());
        return sysDeptService.updateById(sysDept)?R.ok():R.error(CommonConstants.UPDATE_FAIL);
    }
}
